remote code execution explained